package com.battery.system.mapper;


import com.battery.system.base.BaseMapper;
import com.battery.system.domain.BO.UsedBO;
import com.battery.system.domain.IncomeTrend;
import com.battery.system.domain.Used;
import com.battery.system.domain.VO.StatisticsVO;
import com.battery.system.domain.VO.UsedOrder;
import com.battery.system.domain.VO.UsedVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 租借订单Mapper接口
 *
 * @author battery
 * @date 2021-01-22
 */
public interface UsedMapper extends BaseMapper<Used> {
    /**
     * 查询租借订单
     *
     * @param id 租借订单ID
     * @return 租借订单
     */
    public Used selectUsedById(String id);

    /**
     * 查询租借订单列表
     *
     * @param used 租借订单
     * @return 租借订单集合
     */
    public List<Used> selectUsedList(Used used);

    /**
     * 新增租借订单
     *
     * @param used 租借订单
     * @return 结果
     */
    public int insertUsed(Used used);

    /**
     * 修改租借订单
     *
     * @param used 租借订单
     * @return 结果
     */
    public int updateUsed(Used used);

    /**
     * 删除租借订单
     *
     * @param id 租借订单ID
     * @return 结果
     */
    public int deleteUsedById(String id);

    /**
     * 批量删除租借订单
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteUsedByIds(String[] ids);

    /**
     * 查询使用记录
     *
     * @param usedBO
     * @return
     */
    List<UsedVO> selectUsedVOList(@Param("usedBO") UsedBO usedBO);

    /**
     * 查询该VIP用户今日已免费次数
     *
     * @param appUserId
     * @return
     */
    Integer selectCountByTodayFree(@Param("appUserId") String appUserId);


    List<UsedOrder> selectUsedOrderList(@Param("map") Map<String, String> map);

    List<UsedOrder> selectUsedDevOrderList(@Param("devId") String devId);

    /**
     * @param map
     * @return
     */
    List<UsedVO> selectListByMap(@Param("map") Map<String, Object> map);

    /**
     * @param map
     * @return
     */
    Integer selectListByMapCout(@Param("map") Map<String, Object> map);

    /**
     * 查询总营业收入
     *
     * @return
     */
    BigDecimal selectSuccessSum();

    /**
     * @return
     */
    Long selectSuccessCount();

    /**
     * @return
     */
    List<StatisticsVO> selectStatisticsVO();

    /**
     * 查询最近一个月的营业额
     *
     * @return
     */
    BigDecimal selectSuccessSumByMouth();

    /**
     * @return
     */
    Long selectSuccessCountByMouth();

    /**
     * 查询该电池是否存在对应租借中的订单
     *
     * @param batterySn
     * @return
     */
    Used selectOneInProgressByBatterySn(String batterySn);

    List<IncomeTrend> selectIncomeByTrendDay(@Param("map") Map<String, String> map);

    List<IncomeTrend> selectIncomeByTrendMonth(@Param("map") Map<String, String> map);

    List<IncomeTrend> selectIncomeByTrendWeek(@Param("map") Map<String, String> map);

    /**
     * 收益统计中 ---- 订单量统计
     *
     * @param map
     * @return
     */
    Long selectCountByMap(@Param("map") Map<String, String> map);

    /**
     * 查询该门店的租借订单信息，已归还，且租借成功
     *
     * @param map
     * @return
     */
    List<Used> selectUsedListByApp(@Param("map") Map<String, String> map);

    /**
     * 根据设备ID查询该设备的营业额
     *
     * @param devId
     * @return
     */
    BigDecimal selectSumByDevId(String devId);

    /**
     * @param id
     * @return
     */
    Long selectInOnCountByPartnerId(String id);

    /**
     * 查询将近99元的租借订单 by one
     *
     * @return
     */
    Used selectOneInOnUsed();

    /**
     * 查询处于初始状态的微信租借订单(最旧)
     *
     * @return
     */
    Used selectOneWxLeaseStateInInitialUsed();

    /**
     * 查询处于初始状态的支付宝租借订单(最旧)
     *
     * @return
     */
    Used selectOneAliLeaseStateInInitialUsed();
}
